package collection.set;

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

public class HashSetDemo {
    public static void main(String[] args) {
        // 创建HashSet
        Set<String> set = new HashSet<>();

        // 添加元素（自动去重）
        set.add("Apple");
        set.add("Banana");
        set.add("Apple"); // 重复元素，添加失败
        set.add("Cherry");
        System.out.println("HashSet内容：" + set); // 无序

        // 判断是否包含
        System.out.println("是否包含Banana：" + set.contains("Banana"));

        // 删除元素
        set.remove("Banana");
        System.out.println("删除后：" + set);

        // 遍历（无序）
        System.out.println("\n遍历元素：");
        for (String element : set) {
            System.out.println(element);
        }

        // 存储自定义对象（需重写hashCode()和equals()）
        Set<Person> personSet = new HashSet<>();
        personSet.add(new Person("张三", 20));
        personSet.add(new Person("张三", 20)); // 如果重写了方法，会被视为重复
        System.out.println("\nPerson集合大小：" + personSet.size());
    }

    static class Person {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        // 必须重写hashCode()和equals()才能实现自定义对象去重
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Person person = (Person) o;
            return age == person.age && name.equals(person.name);
        }

        @Override
        public int hashCode() {
            return Objects.hash(name, age);
        }
    }
}
